﻿using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using AudiPyme.DAL;

namespace AudiPyme.UI
{
    public partial class EmpresaCrear : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!IsPostBack)
                {
                    int idEmpresa = 0;
                    ModeloContainer agenteBD = new ModeloContainer();
                    String nombreUsuario = (String)Session["nombreUsuario"];
                    if (String.IsNullOrEmpty(nombreUsuario))
                    {
                        MuestraMensaje("No se pudo recoger el usuario");
                        PanelDatos.Visible = false;
                    }
                    else
                    {
                        idEmpresa = UsuariosFactory.EmpresaUsuario(nombreUsuario);
                    }
                    if (idEmpresa != 0)
                    {
                        MuestraMensaje("El usuario " + nombreUsuario + " ya esta asociado a una empresa");
                        PanelDatos.Visible = false;
                    }
                }
            }
            catch (Exception e1)
            {
                e1.ToString();
                Session.Abandon();
                MuestraMensajeRedirige("Error al recoger la variable de sesión. La aplicación se cerrará por motivos de seguridad", "InicioSesion");
            }
        }

        protected void BtnCrear_Click(object sender, EventArgs e)
        {
            Page.Validate("validarFormulario");
            if (Page.IsValid)
            {
                try
                {
                    //Recogemos los valores de sector y tipo empresa seleccionados
                    String NombreSector = DdlSector.SelectedValue;
                    String NombreTipoEmpresa = DdlTipoEmpresa.SelectedValue;
                    int IdSector = 0;
                    int IdTipoEmpresa = 0;
                    Usuarios usuarioGet = new Usuarios();
                    //Seleccionamos el id del sector asociado al nombre de sector seleccionado
                    IdSector = SectoresFactory.RecogeIdSector(NombreSector);
                    //Seleccionamos el id del tipo de empresa asociado al tipo de empresa seleccionado
                    IdTipoEmpresa = TipoEmpresaFactory.IdTipoEmpresa(NombreTipoEmpresa);
                    if (IdSector != 0 && IdTipoEmpresa != 0)
                    {
                        int NumEmpleados = int.Parse(TxtNumAsalariados.Text);
                        if (CompruebaEmpleados(NumEmpleados, IdTipoEmpresa))
                        {
                            //Insertamos la nueva empresa con los valores recogidos
                            Empresas emp = new Empresas();
                            String Nombre = TxtNombre.Text;
                            int IdEmpresa = EmpresasFactory.CreaEmpresa(Nombre, IdSector, IdTipoEmpresa, NumEmpleados);
                            /****Asociamos el usuario que haya iniciado sesion con la empresa***/
                            //Cogemos el nombre de usuario que inicio la sesion
                            String usuarioEmpresa = (String)Session["nombreUsuario"];
                            //Asociamos la empresa creada al usuario actual
                            UsuariosFactory.AsociaEmpresaUsuario(usuarioEmpresa, IdEmpresa);
                            MuestraMensajeRedirige("Empresa Creada Satisfactoriamente", "EmpresaPrincipal");
                        }
                        else
                        {
                            MuestraMensaje("El Tipo de Empresa y los Números de Empleados no se corresponden. Revíselo");
                        }
                    }
                    else
                    {
                        MuestraMensaje("No se pudo recoger la empresa al no recoger los datos correctamente");
                    }
                }
                catch (Exception e1)
                {
                    e1.ToString();
                    MuestraMensaje("Error al crear la empresa");
                }
            }
            else
            {
                MuestraMensaje("No se pudo crear la Empresa. Revise los datos");
            }
        }

        private void MuestraMensajeRedirige(string Mensaje, string Pagina)
        {
            StringBuilder SB = new StringBuilder();
            SB.Append("alert('");
            SB.Append(Mensaje.Replace("\n", "\\n").Replace("\r", "").Replace("'", "\\'"));
            SB.Append("');");
            SB.Append("var vers = navigator.appVersion;if(vers.indexOf('MSIE 7.0') != -1) { window.location='" + Pagina + ".aspx';} else{ window.location='" + Pagina + ".aspx'; }");
            ScriptManager.RegisterStartupScript(this, this.GetType(), "Success", SB.ToString(), true);
        }

        //Comprueba si el número de Empleados de una empresa se corresponde con el Tipo de Empresa de la misma
        private bool CompruebaEmpleados(int NumEmpleados, int IdTipoEmpresa)
        {
            bool ok = true;
            switch (IdTipoEmpresa)
            {
                case 1:
                    if (NumEmpleados > 9)
                        ok = false;
                    break;
                case 2:
                    if (NumEmpleados > 49 || NumEmpleados < 10)
                        ok = false;
                    break;
                case 3:
                    if (NumEmpleados < 50 || NumEmpleados > 249)
                        ok = false;
                    break;
                default:
                    ok = false;
                    break;
            }
            return ok;
        }
        private void MuestraMensaje(string Mensaje)
        {
            StringBuilder SB = new StringBuilder();
            SB.Append("alert('");
            SB.Append(Mensaje.Replace("\n", "\\n").Replace("\r", "").Replace("'", "\\'"));
            SB.Append("');");
            ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "showalert", SB.ToString(), true);
        }
    }
}